package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class Processor extends Thread{
	
	private Socket scoket;
	
	private InputStream in;
	
	private PrintStream out;
	
	public final static String WRB_ROOT = "D:\\";
	
	public Processor(Socket scoket) {
		this.scoket = scoket;
		try {
			in = scoket.getInputStream();
			out = new PrintStream(scoket.getOutputStream());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void run() {
		String filename = parse(in);
		SendFile(filename);
	}
	
	public String parse(InputStream in){
		
		BufferedReader br = new BufferedReader(new InputStreamReader(in));
		String filename = null;
		try {
			
			String httpMessage = br.readLine();
			String[] content = httpMessage.split(" ");
			if(content.length !=3){
				SendErrorMessage(400,"Client query error!");
				return null;
			}
			System.out.println("code:"+content[0]+",filename="+content[1]+",http version="+content[2]);
			filename = content[1];
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return filename;
	}
	public void SendErrorMessage(int errorCode,String errorMessage){
		out.println("HTTP/1.0 "+errorCode +""+errorMessage);
		out.println("content-type:text/html");
		out.println();
		out.println("<html>");
		out.println("<title>Error Message");
		out.println("</title>");
		out.println("<body>");
		out.println("<h1>ErrorCode:"+errorCode+",Message:"+errorMessage+"</h1>");
		out.println("</body>");
		out.println("</html>");
		out.flush();
		out.close();
		try {
			in.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	public void SendFile(String filename){
		File file = new File(Processor.WRB_ROOT+filename);
		if(!file.exists()){
			SendErrorMessage(400,"File Not Found!");
			return ;
		}
		try {
			InputStream in = new FileInputStream(file);
			byte content[] = new byte[(int)file.length()];
			try {
				in.read(content);
				out.println("HTTP/1.0 200 queryfile");
				out.println("content-length:"+content.length);
				out.println();
				out.write(content);
				out.flush();
				out.close();
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		
	}
}
